//获取包名
package com.codeyang.controller.system;/**
 * 描述: TO-删除标志-DO
 *
 * @author CodeYang_Site
 * @version 2021/5/6 21:03
 */
//设置一个实体变量获取我们输入的类名
//小驼峰变量

import com.codeyang.domain.Role;
import com.codeyang.dto.RoleDto;
import com.codeyang.service.RoleService;
import com.codeyang.utils.AjaxResult;
import com.codeyang.utils.ShiroSecurityUtils;
import com.codeyang.vo.DataGridView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/system/role")
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 分页查询
     *
     * @return
     */
    @GetMapping("/listRoleForPage")
    public AjaxResult listForPage(RoleDto roleDto) {
        DataGridView dataGridView = roleService.lisPage(roleDto);
        return AjaxResult.success("数据加载成功", dataGridView.getData(), dataGridView.getTotal());
    }


    /**
     * 角色全查询
     * | 启用禁用
     * | 排序
     *
     * @return
     */
    @GetMapping("/selectAllRole")
    public AjaxResult selectAllRole() {
        List<Role> roles = roleService.selectAllRole();
        return AjaxResult.success(roles);
    }


    /**
     * 新增数据
     *
     * @param roleDto 新增数据
     * @return 是否新增成功
     */
    @PostMapping("/addRole")
    public AjaxResult addRole(@Validated RoleDto roleDto) {
        roleDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());
        boolean isSaveOk = roleService.saveRole(roleDto);
        return isSaveOk ? AjaxResult.success() : AjaxResult.fail("新增失败");
    }

    /**
     * 修改
     *
     * @param roleDto 要修改的数据
     * @return 是否修改成功
     */
    @PutMapping("/updateRole")
    public AjaxResult updateRole(@Validated RoleDto roleDto) {
        roleDto.setSimpleUser(ShiroSecurityUtils.getCurrentSimpleUser());

        boolean flage = roleService.updateRole(roleDto);
        return flage ? AjaxResult.success() : AjaxResult.fail("修改失败");

    }

    /**
     * 删除数据
     *
     * @param ids 根据id删除数据
     * @return 是否删除成功
     */
    @DeleteMapping("/deleteRoleByIds/{ids}")
    public AjaxResult deleteRoleByIds(@PathVariable("ids") Long[] ids) {
        boolean flag = roleService.removeByIds(Arrays.asList(ids));
        return flag ? AjaxResult.success() : AjaxResult.fail("删除失败");
    }

    /**
     * 根据id查询数据
     *
     * @param id 数据的id
     * @return 数据的实体
     */
    @GetMapping("/getRoleById/{id}")
    public AjaxResult getOne(@PathVariable("id") Long id) {
        return AjaxResult.success(roleService.getById(id));
    }


    /**
     * 根据用户的id 查询用户的角色id
     *
     * @param userId
     * @return
     */
    @GetMapping("/getRoleIdsByUserId/{userId}")
    public AjaxResult getRoleIdsByUserId(@PathVariable("userId") Long userId) {

        List<Long> roleIds = roleService.getRoleIdsByUserId(userId);
        return AjaxResult.success(roleIds);

    }

    /**
     * 保存用户和角色之间的关系
     * 操作逻辑
     * | 先删除在新增
     *
     * @param userId
     * @param roleIds
     * @return
     */
    @PostMapping("/saveRoleUser/{userId}/{roleIds}")
    public AjaxResult saveRoleUser(@PathVariable("userId") Long userId, @PathVariable("roleIds") Long[] roleIds) {
        roleService.saveRoleUser(userId, roleIds);
        return AjaxResult.success();
    }

    /**
     * 保存角色和菜单的关系
     * @param roleId
     * @param menuIds
     * @return
     */
    @PostMapping("/saveRoleMenu/{roleId}/{menuIds}")
    public AjaxResult saveRoleMenu(@PathVariable("roleId") Long roleId, @PathVariable("menuIds") Long[] menuIds) {

        roleService.saveRoleMenu(roleId, menuIds);

        return AjaxResult.success();
    }

}
